package com.j48.entrancegurad.mapper;

import com.j48.entrancegurad.model.Admin;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Repository;

import java.util.ArrayList;

/**
 * admin表操作
 */
@Repository
@Mapper
public interface AdminMapper {
    /**
     * 查询所有管理员
     *
     * @return 管理员名单列表
     */
    @Select("select * from `admin` where admin_status=1 or admin_status=0")
    public ArrayList<Admin> selectAll();
    /**
     * 查询所有在职管理员
     *
     * @return 在职管理员名单列表
     */
    @Select("select * from `admin` where admin_status=1")
    public ArrayList<Admin> selectAllAble();
    /**
     * 按编号查询管理员
     *
     * @param admin 携带查询条件的管理员对象
     * @return 查询到的管理员
     */
    @Select("select * from `admin` where admin_id=#{admin_id}")
    public Admin selectById(Admin admin);
    /**
     * 按姓名查询管理员
     *
     * @param admin 携带查询条件的管理员对象
     * @return 查询到的管理员
     */
    @Select("select * from `admin` where admin_username=#{admin_username}")
    public Admin selectByName(Admin admin);

    /**
     * 登录操作（只有在岗员工可以登录）
     *
     * @param admin 登录人员
     * @return 查询结果
     */
    @Select("select * from `admin` where admin_username=#{admin_username} and admin_password=#{admin_password} and admin_status in (1,5)")
    public Admin login(Admin admin);

    /**
     * 添加管理员
     *
     * @param admin 需要被添加的管理员
     * @return 影响数据库数据条数
     */
    @Insert("insert into `admin`(admin_username,admin_password,admin_name,admin_phone,admin_createtime,admin_status) values (#{admin_username},#{admin_password},#{admin_name},#{admin_phone},#{admin_createtime},1)")
    public int insert(Admin admin);

    /**
     * 更新管理员属性
     *
     * @param admin 更新后的对应管理员的数据
     * @return 影响数据库数据条数
     */
    @Update("update `admin` set admin_username=#{admin_username},admin_password=#{admin_password},admin_name=#{admin_name},admin_phone=#{admin_phone},admin_lasttime=#{admin_lasttime} where admin_id=#{admin_id}")
    public int update(Admin admin);

    /**
     * 开除管理员（假删除）
     *
     * @param admin 被开除的管理员
     * @return 影响数据库数据条数
     */
    @Delete("delete from `admin` where admin_id=#{admin_id}")
    public int delete(Admin admin);
    /**
     * 重新雇佣管理员（被开除管理员重新雇佣）
     *
     * @param admin 被重新雇佣的管理员
     * @return 影响数据库数据条数
     */
    @Update("update `admin` set admin_status=1 where admin_id=#{admin_id}")
    public int rehire(Admin admin);

    /**
     * 修改管理员（账号、密码、姓名、手机号）
     * @param admin 管理员对象
     * @return 影响的行数
     */
    @Update("update admin set admin_username=#{admin_username},admin_password=#{admin_password},admin_name=#{admin_name},admin_phone=#{admin_phone} where admin_id=#{admin_id}")
    public int updateAdmin(Admin admin);

    /**
     * 修改管理员（账号、密码、姓名、手机号）
     * @param admin 管理员对象
     * @return 影响的行数
     */
    @Update("update admin set admin_login=1 where admin_id=#{admin_id}")
    public int updateAdminLogin(Admin admin);

    /**
     * 修改管理员（账号、密码、姓名、手机号）
     * @param admin 管理员对象
     * @return 影响的行数
     */
    @Update("update admin set admin_login=0 where admin_id=#{admin_id}")
    public int updateAdminLogin1(Admin admin);

    /**
     * 更新管理员最后登录时间
     * @param admin 管理员
     * @return 影响行数
     */
    @Update("update admin set admin_lasttime=#{admin_lasttime} where admin_id=#{admin_id}")
    public int updateLasttime(Admin admin);
    /**
     * 按姓名查询管理员
     *
     * @param admin 携带查询条件的管理员对象
     * @return 查询到的管理员
     */
    @Select("select * from `admin` where admin_username=#{admin_username}")
    public ArrayList<Admin> selectByNames(Admin admin);

    /**
     * 按姓名查询管理员
     *
     * @param admin 携带查询条件的管理员对象
     * @return 查询到的管理员
     */
    @Select("select * from `admin` where admin_name=#{admin_name}")
    public ArrayList<Admin> selectByNames1(Admin admin);
}
